using Cruel_WoW_Launcher.Core;
using Cruel_WoW_Launcher.DataFiles;
using Cruel_WoW_Launcher.Frames;
using System;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using System.Windows.Media;
using System.Reflection;
using System.IO;

namespace Cruel_WoW_Launcher
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
			
			InitializeComponent(); 

			if (Properties.Settings.Default.FilePutch == "")
			{
				if (MessageBox.Show("  Если 'НЕТ' клиент установится в директорию лаунчера автоматически.\r\n" +
					"\r\n  Если выбрать 'ДА', тебе будет предложено выбрать папку для установки клиента или вы можете выбрать уже установленный клиент!\r\n", "Привет! При установке клиента есть два варианта",
					MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
				{
					var dialog = new System.Windows.Forms.FolderBrowserDialog();
					System.Windows.Forms.DialogResult result = dialog.ShowDialog();

					if (result == System.Windows.Forms.DialogResult.OK)
					{
						string selectedPath = dialog.SelectedPath;
						//Properties.Settings.Default.FilePutch = dialog.SelectedPath;
						Properties.Settings.Default["FilePutch"] = dialog.SelectedPath;
						Properties.Settings.Default.Save();
						string wowExePath = System.IO.Path.Combine(selectedPath, "wow.exe");
						Properties.Settings.Default.WoWExe = wowExePath;
						Properties.Settings.Default.Save();
						TxtPuth.Text = Properties.Settings.Default.FilePutch;

						// После обновления пути меняем видимость кнопок
						UpdateButton.Visibility = Visibility.Visible; // Показать кнопку Update
						PlayButton.Visibility = Visibility.Hidden; // Скрыть кнопку Play
					}
				}
				else
				{
					// Получаем путь к исполняемому файлу приложения без имени файла
					string exeDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

					exeDirectory = Path.Combine(exeDirectory, "WOW");
					if (!Directory.Exists(exeDirectory))
					{
						Directory.CreateDirectory(exeDirectory);
					}

					// Устанавливаем полученный путь в настройки
					Properties.Settings.Default.FilePutch = exeDirectory;
					Properties.Settings.Default.Save(); // Сохраняем изменения
				};
			}

			FrameApp.frmObj = FrmMain;
            TxtPuth.Text = Properties.Settings.Default.FilePutch;

            this.Loaded += (s, e) =>
            {
                mediaElement.Play(); // Замените myMediaElement на имя вашего MediaElement
            };
        }
        private void OnMediaEnded(object sender, RoutedEventArgs e)
        {
            var mediaElement = sender as MediaElement;
            if (mediaElement != null)
            {
                mediaElement.Position = TimeSpan.Zero; // Сброс позиции воспроизведения на начало
                mediaElement.Play(); // Повторное воспроизведение видео с начала
            }
        }

        private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) => DragMove();

        private void ExitButton_Click(object sender, RoutedEventArgs e) => Close();

        private void MinimizeButton_Click(object sender, RoutedEventArgs e) => WindowState = WindowState.Minimized;
        private void ChkHDGraphics_Click(object sender, RoutedEventArgs e)
        {
            Properties.Settings.Default.HDGraphics = (bool)ChkHDGraphics.IsChecked;
            Properties.Settings.Default.Save();

            if ((bool)ChkHDGraphics.IsChecked)
            {
                if (MessageBox.Show("Если вы хотите включить HD-графику, необходимо перезагрузить программу и перепроверить наличие обновлений!\r\n \r\nХотите перезагрузить сейчас?", "Переключиться на HD-графику",
                    MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                {
                    Extensions.ResetClientVersion();
                    Tools.RestartLauncher();
                }
                else
                    ChkHDGraphics.IsChecked = false;
            }
        }

        private async void Window_Loaded(object sender, RoutedEventArgs e)
        {
            LogHandler.OnStartUp();

            // Load remote config document
            await XMLTools.LoadXMLRemoteConfigAsync();

            ChkHDGraphics.IsChecked = Extensions.IsHDGraphicsEnable();

            // Load navbar links
            // Load news async
            Handlers handlers = new Handlers(this);
            handlers.LoadNavbarLinks();
            await handlers.LoadNewsAsync();

            if (Extensions.IsNewRemoteClientVersion())
            {
                // Get Normal & HD Graphics files list from remote server
                await Downloader.UpdateNormalFilestList();
                await Downloader.UpdateHDFilestList();

                // update available
                PlayButton.Visibility = Visibility.Hidden;
                UpdateButton.Visibility = Visibility.Visible;
            }
            else
            {
                // ready to play
                UpdateButton.Visibility = Visibility.Hidden;
                PlayButton.Visibility = Visibility.Visible;
            }

            // Hide placeholder
            UpdatingPlaceholder.Visibility = Visibility.Hidden;
        }


        private void PlayButton_Click(object sender, RoutedEventArgs e)
        {
            ClientHandler.StartWoWClient();

            WindowState = WindowState.Minimized;
        }

        private async void UpdateButton_Click(object sender, RoutedEventArgs e)
        {
            Downloader downloader = new Downloader(this);
            // Update download list based on if hd graphics checkbox is checked
            await downloader.UpdateDownloadListAsync();
            downloader.StartUpdating();
        }

        private void BtnReadMore_Click(object sender, RoutedEventArgs e)
        {

        }

        private bool SettingBtn = false;
        private void SettingsButton_Click(object sender, RoutedEventArgs e)
        {
            if (!SettingBtn)
            {
                SettingBtn = true;

                Style settingsButtonStyle = Application.Current.FindResource("ButtonStyleSettingsOpen") as Style;
                SettingsButton.Style = settingsButtonStyle;

                // Создаем новый ImageBrush
                ImageBrush imageBrush = new ImageBrush();
                // Устанавливаем источник изображения для кисти
                imageBrush.ImageSource = new BitmapImage(new Uri("pack://application:,,,/Resources/exit_setting_button_a.png"));
                // Устанавливаем режим растягивания (если нужно)
                imageBrush.Stretch = Stretch.Uniform;
                // Присваиваем созданную кисть в качестве фона кнопки
                SettingsButton.Background = imageBrush;

                GridSettings.Visibility = Visibility.Visible;
                LabelNews.Visibility = Visibility.Hidden;
                NewsGrid.Visibility = Visibility.Hidden;
            }
            else
            {
                Style settingsButtonStyle = Application.Current.FindResource("ButtonStyleSettings") as Style;
                SettingsButton.Style = settingsButtonStyle;

                // Создаем новый ImageBrush
                ImageBrush imageBrush = new ImageBrush();
                // Устанавливаем источник изображения для кисти
                imageBrush.ImageSource = new BitmapImage(new Uri("pack://application:,,,/Resources/settings_button_a.png"));
                // Устанавливаем режим растягивания (если нужно)
                imageBrush.Stretch = Stretch.Uniform;
                // Присваиваем созданную кисть в качестве фона кнопки
                SettingsButton.Background = imageBrush;

                SettingBtn = false;
                GridSettings.Visibility = Visibility.Hidden;
                LabelNews.Visibility = Visibility.Visible;
                NewsGrid.Visibility = Visibility.Visible;
            }

            //Settings Okno = new Settings();
            //Okno.ShowDialog();
        }
        private void Puth_Click(object sender, RoutedEventArgs e)  // Кнопка указания папки клиентаааааа
        {

            var dialog = new System.Windows.Forms.FolderBrowserDialog();
            System.Windows.Forms.DialogResult result = dialog.ShowDialog();

            if (result == System.Windows.Forms.DialogResult.OK)
            {



				string selectedPath = dialog.SelectedPath;
				//Properties.Settings.Default.FilePutch = dialog.SelectedPath;

				Properties.Settings.Default.FilePutch = dialog.SelectedPath;
                Properties.Settings.Default.Save();
                string wowExePath = System.IO.Path.Combine(selectedPath, "wow.exe");
                Properties.Settings.Default.WoWExe = wowExePath;
                Properties.Settings.Default.Save();

				TxtPuth.Text = Properties.Settings.Default.FilePutch;

                // После обновления пути меняем видимость кнопок
                UpdateButton.Visibility = Visibility.Visible; // Показать кнопку Update
                PlayButton.Visibility = Visibility.Hidden; // Скрыть кнопку Play
				Extensions.ResetClientVersion();
				Tools.RestartLauncher();
			}

        }

        private void EscapeDownload_Click(object sender, RoutedEventArgs e) //Кнопка отмены загрузкиииии
        {
                FrameApp.EscapeDownload = true;
            if (Downloader.ClientDownloader != null && Downloader.ClientDownloader.IsBusy)
            {
                Downloader.ClientDownloader.CancelAsync();
            }
                UpdateButton.Visibility = Visibility.Visible;
                ProgressGrid.Visibility = Visibility.Hidden;
                PlayButton.Visibility = Visibility.Hidden;
                UpdatingPlaceholder.Visibility = Visibility.Hidden;
                ChkHDGraphics.IsEnabled = true;
                EscapeDownload.Visibility = Visibility.Hidden;
                LogHandler.WriteToLog("EscapeDownload enable");
        }
    }
}
